Nicht alle Datenfelder k÷nnen neu dimensioniert werden. Selbst als dynamisch deklarierte Datenfelder und Datenfelder mit Variant-Variablen sind manchmal vorⁿbergehend gesperrt. Dieser Fehler hat die folgenden Ursachen und L÷sungen:
FestesFeld
von TestFeld
in der Prozedur Proz2
ⁿbernommen. Dann wird versucht, die Gr÷▀e von TestFeld
zu Σndern:
Sub Proz1
Dim FestesFeld(25) As Integer ' Erstellt Feld fester Gr÷▀e
Proz2 FestesFeld() ' ▄bergabe an andere Prozedur.
End Sub
Sub Proz2 (TestFeld() As Integer)
ReDim TestFeld(35) ' Fehler 10 tritt auf.
. . .
End Sub
Machen Sie das ursprⁿngliche Datenfeld dynamisch anstatt konstant, indem Sie es mit ReDim (wenn das Datenfeld in einer Prozedur deklariert wurde) oder ohne Angabe der Anzahl der Elemente (wenn das Datenfeld auf Modulebene deklariert wurde) deklarieren.
ModFeld
ein auf Modulebene dynamisches Datenfeld, dessen 45. Element als Referenz an die Prozedur Test
ⁿbergeben wird:
Dim ModFeld () As Integer ' Erstellt dynamisches Datenfeld.
. . .
Sub AliasError()
ReDim ModFeld (1 To 73) As Integer
Test ModFeld (45) ' ▄bergibt Element des
' Datenfeldes an die Prozedur Test.
End Sub
Sub Test(TestInt As Integer)
ReDim ModFeld (1 To 40) As Integer ' Fehler tritt auf.
End Sub
Sie mⁿssen in diesem Fall kein Element des Datenfeldes auf Modulebene ⁿbergeben, da alle Prozeduren des Moduls darauf zugreifen k÷nnen. Wenn Sie jedoch ein Element ⁿbergeben, wird das Datenfeld gesperrt, damit der Speicher fⁿr den referenzierten Parameter in der Prozedur nicht freigegeben wird. Anderenfalls wΣre das Verhalten bei Rⁿcksprung aus der Prozedur nicht mehr vorherzusehen.
TestFeld = Array(9,8,7,6,5,4,3,2,1)
For Each X In TestFeld
TestFeld = 301 ' Fehler, da Datenfeld gesperrt ist.
Next X
Verwenden Sie eine For...Next-Schleife anstatt einer For Each...Next-Schleife, um die Variable zu durchlaufen. Wenn ein Datenfeld das Objekt einer For Each...Next-Schleife ist, k÷nnen Sie das Datenfeld zwar lesen, jedoch keine Werte in das Feld schreiben.
Weitere Informationen erhalten Sie, wenn Sie das fragliche Element auswΣhlen und F1 (unter Windows) oder HILFE (beim Macintosh) drⁿcken.